﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Data;
using System.Collections;

public partial class administracion_permisos_usuario : System.Web.UI.Page
{



    protected void Page_Load(object sender, EventArgs e)
    {

        Menu m = Session["Menu"] as Menu;
        if (m == null) Response.Redirect("../login.aspx");       
        if (!m.Administracion)
        {
            Response.Redirect("../home/home.aspx");
        }
        Menu menuLateral = new Menu();
        lblMenuLateral.Text = menuLateral.MenuAdministracionDetalles();

        desactivarCampos();
        SetFocus(btnBuscar);

    }

    /***********************Funciones***********************/
    private void llenarDatosGridPermisos()
    {
        Usuario u = Session["UsuarioSeleccionado"] as Usuario;

        PermisoUsuario pu = new PermisoUsuario(u);

        DataSet ds = pu.Listar();
        gvPermisos.DataSource = ds.Tables[0];
        gvPermisos.DataBind();
        Session["Permisos"] = ds.Tables[0]; //Almaceno el DataSet en unavariable de Session para usarla el Sorting del GridView


        for (int i = 0; i < gvPermisos.Rows.Count; i++)
        {
            CheckBox b = gvPermisos.Rows[i].Cells[3].FindControl("CheckBox1") as CheckBox;
            b.Enabled = false;
            b.Checked = ds.Tables[0].Rows[i]["estado"].ToString() == "1" ? true : false; //rellenamos los permisos si es 1 true, si es 0 false

        }



    }
    protected void gvPermisos_PageIndexChanging(object sender, GridViewPageEventArgs e)
    {
        gvPermisos.PageIndex = e.NewPageIndex;
        gvPermisos.DataSource = Session["Permisos"];
        gvPermisos.DataBind();

    }

    private void desactivarCampos()
    {
       txtUsuario.Enabled = false;
    }

    /**************Botones*********************************/
    protected void btnBuscar_Click(object sender, EventArgs e)
    {
        btnGuardar.Visible = false;
        lblMensaje.Text = "";
        SetFocus(txtUsuarioBuscar);
        llenarDatosGridBuscar();
        mpeBuscar.Show();

    }

    protected void btnGuardar_Click(object sender, EventArgs e)
    {
        Usuario u = Session["UsuarioSeleccionado"] as Usuario;
        PermisoUsuario p = new PermisoUsuario(u);

        try
        {

            for (int i = 0; i < gvPermisos.Rows.Count; i++)
            {
                CheckBox check = gvPermisos.Rows[i].Cells[3].FindControl("CheckBox1") as CheckBox;
                
                p.Actualizar(i, check.Checked == true ? 1 : 0);  // actualizamos los permisos

            }
            lblMensaje.Text = "Se guardaron los cambios correctamente";
        }
        catch (ConexionException ex)
        {
            lblMensaje.Text = ex.Message;
        }

        llenarDatosGridPermisos();
        btnBuscar.Enabled = true;
        btnModificar.Visible = true;
        btnGuardar.Visible = false;
        btnCancelarModificar.Visible = false;
        btnCancelar.Visible = true;
        btnCancelar.Enabled = true;

    }
    protected void btnModificar_Click(object sender, EventArgs e)
    {
        btnModificar.Visible = false;
        btnGuardar.Visible = true;
        btnCancelarModificar.Visible = true;
        btnCancelar.Visible = false;
        btnCancelar.Enabled = false;
        btnBuscar.Enabled = false;
        for (int i = 0; i < gvPermisos.Rows.Count; i++)
        {
            CheckBox b = gvPermisos.Rows[i].Cells[3].FindControl("CheckBox1") as CheckBox;
            b.Enabled = true;
        }

    }
    protected void btnCancelarModificar_Click(object sender, EventArgs e)
    {
        btnModificar.Visible = true;
        btnGuardar.Visible = false;
        btnCancelarModificar.Visible = false;
        btnCancelar.Visible = true;
        btnCancelar.Enabled = true;
        btnBuscar.Enabled = true;
        llenarDatosGridPermisos();
    }

    protected void btnCancelar_Click(object sender, EventArgs e)
    {
        btnModificar.Visible = false;
        txtUsuario.Text = "";
        gvPermisos.DataSource = null;
        gvPermisos.DataBind();
        btnCancelar.Enabled = false;
    }

    /**************************Controles de busqueda*****************/

    protected void btnBuscarPopub_Click(object sender, EventArgs e)
    {

        llenarDatosGridBuscar();
        mpeBuscar.Show();

    }

    private void llenarDatosGridBuscar()
    {
        Usuario u = new Usuario();
        Session["Usuario"] = u; //guardo el usuario en la session para utilizar sus metodos despues

        DataSet ds = u.Buscar(txtUsuarioBuscar.Text, txtNombreBuscar.Text, txtNroDocBuscar.Text);
        gvUsuarios.DataSource = ds.Tables[0];
        gvUsuarios.DataBind();
        Session["Usuarios"] = ds.Tables[0]; //Almaceno el DataSet en unavariable de Session para usarla el Sorting del GridView

    }
    protected void gvUsuarios_PageIndexChanging(object sender, GridViewPageEventArgs e)
    {
        gvUsuarios.PageIndex = e.NewPageIndex;
        gvUsuarios.DataSource = Session["Usuarios"];
        gvUsuarios.DataBind();
        mpeBuscar.Show();
    }

    protected void btnLimpiarCampos_Click(object sender, EventArgs e)
    {
        limpiarCamposBuscar();
        mpeBuscar.Show();
    }

    private void limpiarCamposBuscar()
    {
        txtUsuarioBuscar.Text = "";
        txtNombreBuscar.Text = "";
        txtNroDocBuscar.Text = "";
    }

    protected void gvUsuarios_RowCommand(object sender, GridViewCommandEventArgs e)
    {
        if (e.CommandName == "select")
        {
            gvUsuarios.SelectedIndex = Convert.ToInt32(e.CommandArgument);
            int idUsuario = Convert.ToInt32(gvUsuarios.SelectedDataKey.Value);


            //Recupera la tabla Usuarios de la session
            DataTable dt = Session["Usuarios"] as DataTable;

            //Busca en la tabla el row con el id del usuario seleccionado
            DataRow[] rows = dt.Select("id_usuario = " + idUsuario + " ");

            //Creamos un usuario con los datos cargados del grid   
            Usuario u = new Usuario();
            u.Id = idUsuario;
            u.NombreUsuario = rows[0]["usuario"].ToString();
            u.Contrasena = rows[0]["contrasena"].ToString();
            u.Nombre = rows[0]["nombre"].ToString();
            u.Apellido = rows[0]["apellido"].ToString();
            u.TipoDoc = rows[0]["tipo_doc"].ToString();
            u.NroDocumento = Convert.ToInt32(rows[0]["nro_documento"].ToString());
            u.Sexo = rows[0]["sexo"].ToString();
            u.TipoPersona = rows[0]["tipo_persona"].ToString();
            u.Direccion = rows[0]["direccion"].ToString();
            u.Ciudad = rows[0]["ciudad"].ToString();
            u.Telefono = rows[0]["telefono"].ToString();
            u.Email = rows[0]["email"].ToString();
            u.Estado = rows[0]["estado"].ToString();
            //Guardamos el usuario seleccionado en la session para poder modificarlo o eliminarlo despues
            Session["UsuarioSeleccionado"] = u;

            cargarUsuarioSeleccionado(); //cargamos a la interfaz los datos del usuario seleccionado


        }

    }
    /**
     * Carga el usuario que se había selecionado en la busqueda a la interfaz
     */
    private void cargarUsuarioSeleccionado()
    {
        Usuario u = Session["UsuarioSeleccionado"] as Usuario;
        txtUsuario.Text = u.NombreUsuario;
        llenarDatosGridPermisos();
        btnModificar.Visible = true;
        btnCancelar.Enabled = true;

    }
    //Ordena el GridView de Busqueda de usuarios
    protected void gvUsuarios_Sorting(object sender, GridViewSortEventArgs e)
    {

        //Recupera la tabla de la session
        DataTable dt = Session["Usuarios"] as DataTable;

        if (dt != null)
        {

            //Orden alos datos
            dt.DefaultView.Sort = e.SortExpression + " " + GetSortDirection(e.SortExpression);
            gvUsuarios.DataSource = Session["Usuarios"];
            gvUsuarios.DataBind();
        }
        mpeBuscar.Show();
    }

    private string GetSortDirection(string column)
    {

        // Por defecto, seteamos la direccion como ascendente
        string sortDirection = "ASC";

        // Recuparea la ultima columna que fue ordenada
        string sortExpression = ViewState["SortExpression"] as string;

        if (sortExpression != null)
        {

            if (sortExpression == column)
            {
                string lastDirection = ViewState["SortDirection"] as string;
                if ((lastDirection != null) && (lastDirection == "ASC"))
                {
                    sortDirection = "DESC";
                }
            }
        }


        // Guarda los nuevos valores en el ViewState
        ViewState["SortDirection"] = sortDirection;
        ViewState["SortExpression"] = column;

        return sortDirection;
    }



}
